タスク・スケジューラー

[scheduler]

oneAPI スレッディング・ビルディング・ブロック (oneTBB) は、アルゴリズム・テンプレートとタスクグループを動作するエンジンであるタスク・スケジューラーを提供します。実際のタスク API は、実装によって異なります。

タスクは計算の論理ユニットです。スケジューラーはワーカーのスレッドプールを実装し、タスクをスレッドにマップします。マッピングはノンプリエンプティブです。スレッドがタスクの実行を開始すると、完了するまでスレッドにバインドされます。その間、スレッドは以下で説明するように入れ子になった並列構造の完了を待機する場合にのみ、他のタスクを処理します。待機中は、ユーザースレッドまたはワーカースレッドのいずれかが、このスレッドもしくは他のスレッドによって生成された関連性のないタスクを含む利用可能なタスクを実行できます。

タスク・スケジューラーは、計算主体のワークを並列化するように設計されています。タスク・オブジェクトはプリエンプティブにスケジュールされないため、スレッドがほかのタスクを処理できない間、スレッドを長い間ブロックする呼び出しを行ってはなりません。

警告

スケジューラーは利用可能なワーカースレッドに収まるように実際の並列処理を調整するため、潜在的に 並列可能なタスクが実際に 並列実行される保証はありません。例えば、単一のワーカースレッドが提供された場合、スケジューラーは並列処理を行えません。さらに、生産タスクの実行中に消費タスクがこのワーク実行する保証がないため、生産タスクと消費タスク間でタスクを使用することは安全ではありません。

スケジューラー制御

タスクグループ

タスク領域

ヘルパータイプ